<?php
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/util/database.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/bitacoras_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/empleador_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/dto/aspirante_dto.php");
include_once ($_SERVER ["DOCUMENT_ROOT"] . "/bolsa_trabajo/email/sent_email.php");
class OfertaDTO {
	public function __construct() {
		exit ( 'Init function is not allowed' );
	}
	
	public static function cambiarEstadoOferta($estado,$idEmpleador){
		// Primero Cambiamos el estado de las ofertas
		
		$con = Database::connect ();
		$query = " update tbl_oferta set estado = ? where tbl_empleador_id_empleador = ?;  ";
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $estado );
		$stmt->bindParam (2, $idEmpleador );
		
		
		
		$stmt->execute ();
		
	}
	
	public static function cambiarEstadoAplicaciones($estado, $idEmpleador){
		$con = Database::connect ();
		$stmt = self::getOfertasEmpleador($idEmpleador);
		
		$num = $stmt->rowCount ();
		if($num>0){
		
			while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
				//exraer row
		
				extract($row);
					
				// Para cada una de las ofertas . se realiza la prueba. 
				self::cambiarOfertaAplica($estado,$id_oferta);
					
		
			}
		}	
	}
	
	public static function cambiarOfertaAplica($estado,$idOferta){
		$con = Database::connect ();
		$query = "update tbl_oferta_aplica
					set estado_aplicacion = ?
				where tbl_oferta_id_oferta = ?";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $estado );
		$stmt->bindParam ( 2, $idOferta );
		$stmt->execute ();
		
		
	}
	
	public static function cambiarOfertaAplicaAspirante($estado,$idAspirante){
		$con = Database::connect ();
		$query = "update tbl_oferta_aplica
					set estado_aplicacion = ?
				where tbl_aspirante_id_aspirante = ?";
	
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $estado );
		$stmt->bindParam ( 2, $idAspirante );
		$stmt->execute ();
	
	
	}
	
	
	public static function getOfertasEmpleador($idEmpleador) {
		$con = Database::connect ();
		$query = "select
				ofe.id_oferta,
				ar.nombre_area_empresa,
				ca.descripcion as desc_cargo_contratado,
				ofe.inicio_vigencia,
				ofe.fin_vigencia,
				ofe.estado
				from
				tbl_empleador as emp,
				tbl_rango_salarial as ra,
				tbl_cargo as ca,
				tbl_area_empresa as ar,
				tbl_oferta as ofe
				where
				ofe.tbl_empleador_id_empleador = ? and
				emp.id_empleador = ofe.tbl_empleador_id_empleador   and
				ar.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa   and
				ca.id_cargo = ofe.id_cargo_solicitado    and
				ra.id_rango_salarial = ofe.id_rango_salarial order by ofe.fecha_registro desc
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idEmpleador );
		$stmt->execute ();
		
		return $stmt;
	}
	public static function getOfertas() {
		$con = Database::connect();
		$query = "select
				ofe.id_oferta,
				emp.nombre_empresa,
				ar.nombre_area_empresa,
				ca.descripcion as desc_cargo_contratado,
				ofe.fin_vigencia

				from
				tbl_empleador as emp,
				tbl_rango_salarial as ra,
				tbl_cargo as ca,
				tbl_area_empresa as ar,
				tbl_oferta as ofe
				where
				ofe.estado = 'Activa' and
				emp.id_empleador = ofe.tbl_empleador_id_empleador   and
				ar.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa   and
				ca.id_cargo = ofe.id_cargo_solicitado    and
				ra.id_rango_salarial = ofe.id_rango_salarial order by ofe.fecha_registro desc
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->execute ();
		Database::disconnect();
		return $stmt;
	}
	
	
	public static function getOfertasFiltradas($areaEmpresa,$cargoSolicitado, $rangoSalarial,$idAspirante) {
		$con = Database::connect ();
		error_log ( 'Valor de los filtros para la busqueda de perfiles de aspirante $areaEmp: ' . $areaEmpresa . 
		' cargoSolicitado : ' . $cargoSolicitado . ' rangSala: ' . $rangoSalarial .  ' idAspirante: ' . $idAspirante, 0 );
		$queryPart1 = "select
				ofe.id_oferta,
				emp.nombre_empresa,
				ar.nombre_area_empresa,
				ca.descripcion as desc_cargo_contratado,
				ra.descripcion as desc_rango_salarial,
				ofe.fin_vigencia	
				from
				tbl_empleador as emp,
				tbl_rango_salarial as ra,
				tbl_cargo as ca,
				tbl_area_empresa as ar,
				tbl_oferta as ofe
				where ";
		
		$queryPart2 = " ";
		
		if($areaEmpresa > 0 ) {
			$queryPart2 = $queryPart2 . " ofe.tbl_area_empresa_id_area_empresa =  "  . $areaEmpresa . " and ";
			
		}
		if($cargoSolicitado > 0) {
			$queryPart2 = $queryPart2 . " ofe.id_cargo_solicitado =  "  . $cargoSolicitado . " and ";
			
		}
		
		if($rangoSalarial > 0){
			$queryPart2 = $queryPart2 . " ofe.id_rango_salarial =  "  . $rangoSalarial . " and ";
		}
		
		$queryPart3 = "	ofe.estado = 'Activa' and
				(ofe.id_oferta," .$idAspirante . ") not in(select tb.tbl_oferta_id_oferta, tb.tbl_aspirante_id_aspirante from tbl_oferta_aplica as tb where  tb.tbl_aspirante_id_aspirante = ?)
				and 
				emp.id_empleador = ofe.tbl_empleador_id_empleador   and
				ar.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa   and
				ca.id_cargo = ofe.id_cargo_solicitado    and
				ra.id_rango_salarial = ofe.id_rango_salarial order by ofe.fecha_registro desc			";
		
		$query = $queryPart1 . $queryPart2 . $queryPart3;
		error_log ( ' QUery para busqueda de ofertas: ' . $query, 0 );
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idAspirante );
		$stmt->execute ();
		Database::disconnect();
		return $stmt;
	}
	
	
	
	

	
	public static function getOfertaCarreras($idOferta) {
		$con = Database::connect ();
		$query = "select carr.nombre_carrera
				from
				tbl_oferta_carrera as ofecarr,
				tbl_carrera as carr
				where
				ofecarr.tbl_oferta_id_oferta = ? and
				carr.id_carrera = ofecarr.tbl_carrera_id_carrera
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		$stmt->execute ();
		
		return $stmt;
	}
	
	
	
	public static function getInfoBasicaOfertaToEmail($idOferta) {
		$con = Database::connect ();
		$query = "  select aremp.nombre_area_empresa, car.descripcion as cargo, ra.descripcion as rango, ofe.inicio_vigencia, ofe.fin_vigencia
				from
				tbl_oferta as ofe,
				tbl_area_empresa as aremp,
				tbl_cargo as car,
				tbl_rango_salarial as ra
				where
				ofe.id_oferta = ? and
				aremp.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa and
				car.id_cargo = ofe.id_cargo_solicitado and
				ra.id_rango_salarial = ofe.id_rango_salarial
				";
	
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		
		
		$stmt->execute ();
		$numRow = $stmt->rowCount();
		$infoBasicaOferta = null;
		if($numRow > 0){
		
		
			while ($fila = $stmt->fetch(PDO::FETCH_ASSOC)){
				//exraer row
				//esto convertira $row['nombres'] a
				//solo $nombres
				extract($fila);
				$areaEmpresa = $nombre_area_empresa;
				$cargoSolicitado = $cargo;
				$rangoSalario = $rango;
				$inicioVigencia = $inicio_vigencia;
				$finVigencia = $fin_vigencia;
			}
			$infoBasicaOferta = " Informacion Basica de la Oferta: \n";
			$infoBasicaOferta = $infoBasicaOferta . " Area Empresa: ". $areaEmpresa . " \n"	;	
			$infoBasicaOferta = $infoBasicaOferta . " Cargo Solicitado ". $cargoSolicitado . " \n"	;
			$infoBasicaOferta = $infoBasicaOferta . " Rango Salario ". $rangoSalario . " \n"	;
			$infoBasicaOferta = $infoBasicaOferta . " Inicio Vigencia " . $inicioVigencia . " \t " . " Fin Vigencia: " . $finVigencia . " \n ";
		}
	
		return $infoBasicaOferta;
	}
	
	
	public static function getInfoBasicaOferta($idOferta) {
		$con = Database::connect ();
		$query = "  select aremp.nombre_area_empresa, car.descripcion as cargo, ra.descripcion as rango, ofe.inicio_vigencia, ofe.fin_vigencia
				from
				tbl_oferta as ofe,
				tbl_area_empresa as aremp,
				tbl_cargo as car,
				tbl_rango_salarial as ra
				where
				ofe.id_oferta = ? and
				aremp.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa and
				car.id_cargo = ofe.id_cargo_solicitado and
				ra.id_rango_salarial = ofe.id_rango_salarial
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		$stmt->execute ();
		
		return $stmt;
	}
	
	/*
	 * Obtiene informacion de las ofertas pero con los ids
	 */
	public static function getInfoCompletaOfertaIds($idOferta) {
		$con = Database::connect ();
		$query = " select
				ofe.tbl_area_empresa_id_area_empresa,
				ofe.id_cargo_solicitado,
				ofe.tipo_contratacion,
				ofe.experiencia_requerida,
				ofe.id_nivel_academico,
				ofe.id_rango_salarial,				
				ofe.cantidad_plazas,
				ofe.tbl_municipio_tbl_departamento_id_departamento,
				ofe.tbl_municipio_id_municipio,
				ofe.inicio_vigencia,
				ofe.fin_vigencia,
				ofe.descripcion as descripcion_oferta,
				ofe.estado 

				from
				tbl_oferta as ofe
				
				where ofe.id_oferta = ?
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		$stmt->execute ();
		
		return $stmt;
	}
	public static function getInfoCompletaOferta($idOferta) {
		$con = Database::connect ();
		$query = "select
				emp.nombre_empresa,
				aremp.nombre_area_empresa,
				car.descripcion as cargo,
				ofe.tipo_contratacion,
				ofe.experiencia_requerida,
				niv.descripcion as nivel_academico,
				ra.descripcion as rango,
				ofe.cantidad_plazas,
				depa.nombre_departamento,
				muni.nombre_municipio,
				ofe.inicio_vigencia,
				ofe.fin_vigencia,
				ofe.descripcion as descripcion_oferta,
				ofe.estado 
				from
				tbl_oferta as ofe,
				tbl_area_empresa as aremp,
				tbl_cargo as car,
				tbl_rango_salarial as ra,
				tbl_nivel_academico as niv,
				tbl_municipio as muni,
				tbl_departamento as depa, 
				tbl_empleador as emp
				where
				ofe.id_oferta =? and
				aremp.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa and
				car.id_cargo = ofe.id_cargo_solicitado and
				ra.id_rango_salarial = ofe.id_rango_salarial and
				niv.id_nivel_academico = ofe.id_nivel_academico and
				muni.id_municipio = ofe.tbl_municipio_id_municipio and
				depa.id_departamento = ofe.tbl_municipio_tbl_departamento_id_departamento and
				emp.id_empleador = ofe.tbl_empleador_id_empleador;
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		$stmt->execute ();
		
		return $stmt;
	}
	
	/*
	 * Obtiene las aplicaciones que ha tenido una oferta en especifico
	 */
	public static function getOfertaAplicaciones($idOferta) {
		$con = Database::connect ();
		$query = "  select api.fecha_aplicacion, asp.nombres, asp.apellidos, asp.cum, 
				api.estado_aplicacion,
				asp.url_cv, asp.id_aspirante
				from
				tbl_oferta_aplica as api,
				tbl_oferta as ofe,
				tbl_aspirante as asp

				where
				ofe.id_oferta = ? and
				ofe.id_oferta = api.tbl_oferta_id_oferta and
				asp.id_aspirante = api.tbl_aspirante_id_aspirante
				order by api.fecha_aplicacion asc
				";
		
		$stmt = $con->prepare ( $query );
		$stmt->bindParam ( 1, $idOferta );
		$stmt->execute ();
		
		return $stmt;
	}
	public static function getAplicacionesOfertasByAspirante($idAspirante) {
		$con = Database::connect ();
		$query = "	select
				ofe.id_oferta,
				emp.nombre_empresa,
				ar.nombre_area_empresa,
				ca.descripcion as desc_cargo_contratado,
				ofe.fin_vigencia

				from
				tbl_empleador as emp,
				tbl_rango_salarial as ra,
				tbl_cargo as ca,
				tbl_area_empresa as ar,
				tbl_oferta as ofe,
				tbl_oferta_aplica as apli
				where
				ofe.estado = 'Activa' and
				apli.tbl_aspirante_id_aspirante = ? and
				ofe.id_oferta = apli.tbl_oferta_id_oferta and
				emp.id_empleador = ofe.tbl_empleador_id_empleador   and
				ar.id_area_empresa = ofe.tbl_area_empresa_id_area_empresa   and
				ca.id_cargo = ofe.id_cargo_solicitado    and
				ra.id_rango_salarial = ofe.id_rango_salarial order by ofe.fecha_registro desc ";
		
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $idAspirante );
		$stmt->execute ();
		
		return $stmt;
	}
	public static function registerAplicarOferta($idOferta, $idAspirante) {
		$query = "INSERT INTO tbl_oferta_aplica SET tbl_oferta_id_oferta = ?, tbl_aspirante_id_aspirante = ?, fecha_aplicacion = ?, estado_aplicacion = 'Activa'";
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		$dt = new DateTime ();
		$stringDate = $dt->format ( 'Y-m-d H:i:s' );
		
		$stmt->bindParam ( 1, $idOferta );
		
		$stmt->bindParam ( 2, $idAspirante );
		
		$stmt->bindParam ( 3, $stringDate );
		
		if ($stmt->execute ()) {
			Database::disconnect ();
			self::notificarAplicacionToEmpleador($idOferta,$idAspirante);
			// Debemos de notificar por email 
			return true;
		} else {
			Database::disconnect ();
			return false;
		}
	}
	
	public static function notificarAplicacionToEmpleador($idOferta,$idAspirante){
		$q = EmpleadorDTO::getEmail($idOferta);
		$data = $q->fetch(PDO::FETCH_ASSOC);
		$emailEmpleador = $data['email_contacto'];
		
		$infoBasicaOferta = self::getInfoBasicaOfertaToEmail($idOferta);
		$infoBasicaAspirante = self::getInfoBasicaAspiranteToEmail($idAspirante);
		
		$empleadorEmail = array();
		array_push($empleadorEmail, $emailEmpleador);
		
		$greeting = "Estimado Empleador: " . " \n  Tiene una nueva aplicacion para su oferta laboral. ";
		$message = $infoBasicaAspirante . $infoBasicaOferta;
		$subject = " SITRABS - Tiene una nueva aplicacion a su oferta laboral ";
		
		
		
		$resEnvio = sentEmail ( $greeting, $message, $subject, $empleadorEmail );
		
		if ($resEnvio) {
			return true;
		} else {
			return false;
		}
		
		
	}
	
	public static function getInfoBasicaAspiranteToEmail($idAspirante){
		
		$q = AspiranteDTO::readAspirante($idAspirante);
		$data = $q->fetch(PDO::FETCH_ASSOC);
		$nombres = $data['nombres'];
		$apellidos = $data['apellidos'];
		$email  = $data['email'];
		$carrera= $data['nombre_carrera'];
		$nivelAcademico= $data['descripcion'];
		$cum = $data['cum'];
		$telCelular  = $data['tel_celular'];
		
		$infoBasicaAspirante = "\n Informacion Basica del Aspirante: \n";
		$infoBasicaAspirante = $infoBasicaAspirante . ' Nombres: ' . $nombres . "   Apellidos " . $apellidos . "  Email: " . $email;
		$infoBasicaAspirante = $infoBasicaAspirante . ' Carrera: ' . $carrera .  '  Nivel Academico: ' . $nivelAcademico . ' CUM: ' . $cum;
		$infoBasicaAspirante = $infoBasicaAspirante . ' Telefono Celular: ' . $telCelular;
		return $infoBasicaAspirante;
		
		
	}
	
	public static function existeAplicacionOferta($idOferta, $idAspirante) {
		$con = Database::connect ();
		$query = " select * from tbl_oferta_aplica where  tbl_oferta_id_oferta = ? and tbl_aspirante_id_aspirante = ? ";
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $idOferta );
		
		$stmt->bindParam ( 2, $idAspirante );
		
		$stmt->execute ();
		
		$num = $stmt->rowCount ();
		
		if ($num > 0) {
			$res = 'Si Existe la aplicacion ID OFERTA ' . $idOferta . ' ID aspirante ' . $idAspirante;
			error_log ( $res, 0 );
			Database::disconnect ();
			return true;
		} else {
			$res = 'No Existe la aplicacion ID OFERTA ' . $idOferta . ' ID aspirante ' . $idAspirante;
			error_log ( $res, 0 );
			Database::disconnect ();
			return false;
		}
	}
	
	
	/*
	 * indica si una oferta tiene al menos una aplicacion por parte de un candidato para advertir al empleador o al admin del o que esta a punto 
	 * de hacer enc aso este proceda a desactivar la oferta.
	 */
	public static function tieneAplicacionesOferta($idOferta) {
		$con = Database::connect ();
		$query = " select * from tbl_oferta_aplica where  tbl_oferta_id_oferta = ?  ";
		$stmt = $con->prepare ( $query );
	
		$stmt->bindParam ( 1, $idOferta );
	
	
	
		$stmt->execute ();
	
		$num = $stmt->rowCount ();
	
		if ($num > 0) {
			$res = 'Si tiene aplicaciones la ID OFERTA ' . $idOferta ;
			error_log ( $res, 0 );
			return num;
		} else {
			$res = 'No Existe aplicaciones para la ID OFERTA ' . $idOferta ;
			error_log ( $res, 0 );
			return 0;
		}
	}
	public static function insert($areaEmpresa, $departamento, $municipio, $idEmpleador, $cargoSolicitado, $tipoContratacion, 
			$experienciaRequerida, $nivelAcademico, $descripcion, $inicioVigencia, $finVigencia, $rangoSalarial, $cantidadPlazas) {
		
		// $valores = 'areaEmpresa= ' . $areaEmpresa . ' departamento= ' . $departamento . ' municipio = ' . $municipio .
	//	' idEmpleador = ' . $idEmpleador . ' cargo Solicitado = ' . $cargoSolicitado . ' tipo Contra = ' . $tipoContratacion . ' exper = ' . $experienciaRequerida . ' nivel = ' . $nivelAcademico . ' descripcion = ' . $descripcion . ' inivige ' . $inicioVigencia . ' fin vige = ' . $finVigencia . ' rango = ' . $rangoSalarial . ' plazas = ' . $cantidadPlazas;
		
		// error_log ( ' Los valores en el insert de oferta: ' . $valores , 0);
		// fecha registro y estado son generadas
		$query = "INSERT INTO tbl_oferta
				( tbl_area_empresa_id_area_empresa, tbl_municipio_tbl_departamento_id_departamento,
				tbl_municipio_id_municipio, tbl_empleador_id_empleador, id_cargo_solicitado,
				tipo_contratacion, experiencia_requerida, id_nivel_academico,
				descripcion, estado,
				inicio_vigencia, fin_vigencia, id_rango_salarial,
				cantidad_plazas, fecha_registro)
				VALUES
				(?, ?,
				?, ?, ?,
				?, ?, ?,
				?, ?,
				?, ?, ?,
				?, ?)";
		
		$estado = 'Activa';
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		if (! $con) {
			$error = $con->errorInfo ();
			error_log ( ' Error Insert Oferta: ' . $error, 0 );
		} else {
			//error_log ( ' Ni El statement lo creo bien: ', 0 );
		}
		
		$stmt->bindParam ( 1, $areaEmpresa );
		$stmt->bindParam ( 2, $departamento );
		$stmt->bindParam ( 3, $municipio );
		$stmt->bindParam ( 4, $idEmpleador );
		$stmt->bindParam ( 5, $cargoSolicitado );
		$stmt->bindParam ( 6, $tipoContratacion );
		$stmt->bindParam ( 7, $experienciaRequerida );
		$stmt->bindParam ( 8, $nivelAcademico );
		$stmt->bindParam ( 9, $descripcion );
		$stmt->bindParam ( 10, $estado );
		$stmt->bindParam ( 11, $inicioVigencia );
		$stmt->bindParam ( 12, $finVigencia );
		$stmt->bindParam ( 13, $rangoSalarial );
		$stmt->bindParam ( 14, $cantidadPlazas );
		$dt = new DateTime ();
		$stringDate = $dt->format ( 'Y-m-d H:i:s' );
		
		$stmt->bindParam ( 15, $stringDate );
		
		// Execute the query
		if ($stmt->execute ()) {
			
			error_log ( ' Se logro Insertar la informacion basica de la oferta', 0 );
			$idOfertaAsignado = self::getOfertaIdAsignado ( $idEmpleador, $stringDate );
			
			$respAdmin = null;
			$respEmp = $idEmpleador;
			// Si se escribio en la Bitacora y se pudo crear
			$res = BitacoraOferta::addRegisterBitacoraOferta ( $idOfertaAsignado, $respAdmin, $respEmp, 'Nueva Oferta Laboral', 'CREACION' );
			
			return $idOfertaAsignado;
		} else {
			error_log ( 'No se pudo crear el empleador', 0 );
			Database::disconnect ();
			return 0;
		}
	}
	public static function update($areaEmpresa, $departamento, $municipio, $cargoSolicitado, 
			$tipoContratacion, $experienciaRequerida, $nivelAcademico, $descripcion, $inicioVigencia, $finVigencia, $rangoSalarial,
			 $cantidadPlazas, $idOferta, $idEmpleador) {
		
		 $valores = 'areaEmpresa= ' . $areaEmpresa . ' departamento= ' . $departamento . ' municipio = ' . $municipio .
		' cargo Solicitado = ' . $cargoSolicitado . ' tipo Contra = ' . $tipoContratacion . ' exper = ' . $experienciaRequerida . ' nivel = ' . $nivelAcademico .
		  ' descripcion = ' . $descripcion . ' inivige ' . $inicioVigencia . ' fin vige = ' . $finVigencia . ' rango = ' . $rangoSalarial . 
		 ' plazas = ' . $cantidadPlazas . ' id Empleador: ' . $idEmpleador;
		 
		error_log ( ' Los valores en el update de oferta: ' . $valores, 0 );
		// fecha registro y estado son generadas
		$query = "update tbl_oferta
				set tbl_area_empresa_id_area_empresa=?, tbl_municipio_tbl_departamento_id_departamento =?,
				tbl_municipio_id_municipio=?,  id_cargo_solicitado=?,
				tipo_contratacion=?, experiencia_requerida= ?, id_nivel_academico =?,
				descripcion=?,
				inicio_vigencia=?, fin_vigencia = ?, id_rango_salarial = ?,
				cantidad_plazas = ?
			where id_oferta = ?;";
		
		$estado = 'Activa';
		$con = Database::connect ();
		// preparar query para ejecucion
		$stmt = $con->prepare ( $query );
		
		if (! $con) {
			$error = $con->errorInfo ();
			error_log ( ' Error Update Oferta: ' . $error, 0 );
		} else {
			//error_log ( ' Ni El statement lo creo bien: ', 0 );
		}
		
		$stmt->bindParam ( 1, $areaEmpresa );
		$stmt->bindParam ( 2, $departamento );
		$stmt->bindParam ( 3, $municipio );
		$stmt->bindParam ( 4, $cargoSolicitado );
		$stmt->bindParam ( 5, $tipoContratacion );
		$stmt->bindParam ( 6, $experienciaRequerida );
		$stmt->bindParam ( 7, $nivelAcademico );
		$stmt->bindParam ( 8, $descripcion );
		$stmt->bindParam ( 9, $inicioVigencia );
		$stmt->bindParam ( 10, $finVigencia );
		$stmt->bindParam ( 11, $rangoSalarial );
		$stmt->bindParam ( 12,$cantidadPlazas  );
		$stmt->bindParam ( 13, $idOferta );

		
		
		
		// Execute the query
		if ($stmt->execute ()) {
			
			
			
			$respAdmin = null;
			$respEmp = $idEmpleador;
			// Si se escribio en la Bitacora y se pudo crear
			$res = BitacoraOferta::addRegisterBitacoraOferta ( $idOferta, $respAdmin, $respEmp, 'Modificacion Oferta Laboral', 'MODIFICACION' );
			
			return $idOferta;
		} else {
			error_log ( 'No se pudo crear el empleador', 0 );
			Database::disconnect ();
			return 0;
		}
	}
	
	// ///////////////
	public static function getOfertaIdAsignado($idEmpleador, $fecha) {
		$pdo = Database::connect ();
		$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$sql = "select  id_oferta 	from tbl_oferta where tbl_empleador_id_empleador = ? and fecha_registro = ?";
		$stmt = $pdo->prepare ( $sql );
		
		$stmt->bindParam ( 1, $idEmpleador );
		$stmt->bindParam ( 2, $fecha );
		$q = $stmt->execute ();
		
		$num = $stmt->rowCount ();
		
		$resultado = 0;
		
		if ($num > 0) {
			
			while ( $row = $stmt->fetch ( PDO::FETCH_ASSOC ) ) {
				$resultado = $row ['id_oferta'];
			}
		} else {
			// Fallo autenticacion
			$resultado = 0;
		}
		
		Database::disconnect ();
		return $resultado;
	}
	
	
	/*
	 * Esta funcion tendra tres tareas 
	 * 1. Modificar el estado de la oferta a Inactivo
	 * 2. Modificar la tbl_oferta_aplica para poner como inactivo todas las aplicacionse a esta oferta.
	 * 3. Ingresar en la bitacora de oferta el movimiento de desactivacion
	 * 
	 */
	
	public static function deactivateOferta ( $idOferta, $responsableAdmin, $responsableEmp ){
		
		// Modificar el estado de la oferta
		$con = Database::connect ();
		$query = " update tbl_oferta set estado = 'Inactiva' where id_oferta = ? ";
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $idOferta );
		
		if ($stmt->execute ()) {
			error_log(' Se logro desactivar la oferta con id: ' . $idOferta , 0);
			$resAplica = self::deactivateAplicacionesOferta ($idOferta);
			
			if($resAplica){
				error_log(' Se logro desactivar las APLICACIONES de la oferta con id: ' . $idOferta , 0);
				//Significa que desactivo bien las aplicaciones y debemos de registrar en la bitacora.
				// Procedemos a insertar en la bitacora
				$resBitacora = BitacoraOferta::addRegisterBitacoraOferta ( $idOferta, $responsableAdmin, $responsableEmp, 'Desactivacion Oferta Laboral', 'DESACTIVACION' );
				error_log(' Ingresamos en la bitacor la desactivacion de la ofertaa y este fue el resultado ' . $resAplica);
			}
			return true;
		}else{
			return false;
		}
		
		
	
	}
	
	
	public static function deactivateAplicacionesOferta ($idOferta){
		$con = Database::connect ();
		$query = " update tbl_oferta_aplica set estado_aplicacion = 'Inactiva' where tbl_oferta_id_oferta = ?; ";
		$stmt = $con->prepare ( $query );
		
		$stmt->bindParam ( 1, $idOferta );
		
		if ($stmt->execute ()) {
			Database::disconnect ();
			return true;
		}else{
			Database::disconnect ();
			return false;
		}		
	}
	
	/*
	 * Esta funcion tendra tres tareas
	* 1. Modificar el estado de la oferta a Inactivo
	* 2. Modificar la tbl_oferta_aplica para poner como inactivo todas las aplicacionse a esta oferta.
	* 3. Ingresar en la bitacora de oferta el movimiento de desactivacion
	*
	*/
	
	public static function activateOferta ( $idOferta, $responsableAdmin, $responsableEmp ){
	
		// Modificar el estado de la oferta
		$con = Database::connect ();
		$query = " update tbl_oferta set estado = 'Activa' where id_oferta = ? ";
		$stmt = $con->prepare ( $query );
	
		$stmt->bindParam ( 1, $idOferta );
	
		if ($stmt->execute ()) {
			error_log(' Se logro activar la oferta con id: ' . $idOferta , 0);
			$resAplica = self::reactivarAplicacionesOferta ($idOferta);
				
			if($resAplica){
				error_log(' Se logro ACTIVAR las APLICACIONES de la oferta con id: ' . $idOferta , 0);
				//Significa que desactivo bien las aplicaciones y debemos de registrar en la bitacora.
				// Procedemos a insertar en la bitacora
				$resBitacora = BitacoraOferta::addRegisterBitacoraOferta ( $idOferta, $responsableAdmin, $responsableEmp, 'Activacion Oferta Laboral', 'ACTIVACION' );
				error_log(' Ingresamos en la bitacor la ACTIVACIOn  de la ofertaa y este fue el resultado ' . $resAplica);
			}
			return true;
		}else{
			return false;
		}
	
	
	
	}
	
	/*
	 * Coloca nuevamente como activas las aplicaciones a una oferta que recientemente ha sido activada. 
	 */
	
	public static function reactivarAplicacionesOferta ($idOferta){
		$con = Database::connect ();
		$query = " update tbl_oferta_aplica set estado_aplicacion = 'Activa' where tbl_oferta_id_oferta = ?; ";
		$stmt = $con->prepare ( $query );
	
		$stmt->bindParam ( 1, $idOferta );
	
		if ($stmt->execute ()) {
			Database::disconnect ();
			return true;
		}else{
			Database::disconnect ();
			return false;
		}
	}
	
	
	
	
	
	
}
?>